package com.iloomo.util;

import org.apache.commons.lang.StringUtils;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

/**
 * 短信验证码
 *
 * @author 陈龙波
 * 2016年10月27日
 */
public class SMS {

private static Logger logger = Logger.getLogger(SMS.class);

	/**
	 * 短信下发接口
	 * @param mobile	手机号
	 * @param content	短信内容
	 * @param signature	签名
	 * @return
	 */
	public static boolean sendSms(String mobile, String content, String signature){
		return toSendBy5c(mobile,content,signature);
	}

	/**
	 * 美联软通 短信下发接口
	 * @param mobile	手机号
	 * @param content	短信内容
	 * @param signature	签名
	 * @return
	 */
    private static boolean toSendBy5c(String mobile, String content, String signature) {
        boolean ret = false;
        if(StringUtils.isBlank(signature)){
        	signature = ConfigUtil.getValue("smsMessageTitle");//标签签名设置
        }
        signature = "【" + signature + "】";
        try {
        	 String hostname = ConfigUtil.getValue("smsHostname");
             String apiKey = ConfigUtil.getValue("smsApiKey");
             String username = ConfigUtil.getValue("smsUsername");
             String password = ConfigUtil.getValue("smsPassword");
             StringBuffer sb = new StringBuffer(hostname).append("?")
                     .append("apikey=").append(apiKey) // APIKEY
                     .append("&username=").append(username) // 用户名
                     .append("&password=").append(password) // 向StringBuffer追加密码
                     .append("&mobile=" + mobile) // 向StringBuffer追加手机号码
                     .append("&content=" + getEncoder(content + signature, "GBK")); // 向StringBuffer追加消息内容转URL标准码
            // 创建url对象
            URL url = new URL(sb.toString());
            // 打开url连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            // 设置url请求方式 ‘get’ 或者 ‘post’
            connection.setRequestMethod("POST");
            // 发送
            int code = connection.getResponseCode();
            InputStream inputStream = null;
            if (HttpURLConnection.HTTP_OK == code) {
                inputStream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
                logger.info("SMS request & response: " + sb);
                ret = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret;
    }

    /**
     * 对字符串进行编码
     * @param str		编码前内容
     * @param encoding	编码格式
     * @return			编码后内容
     */
    private static String getEncoder(final String str,final String encoding) {
        if(!StringUtils.isBlank(str)&&!StringUtils.isBlank(encoding)){
            try {
                return URLEncoder.encode(str, encoding);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return "";
    }
}
